package com.zjl.redis.第13章_缓存双写一致性;

/**
 * 由于只要是双写，就一定会有数据一致性的问题,
 *  写数据：     w
 *          1.写入 mysql
 *          2.写入 redis
 *  读数据，最多步: r
 *          1.读redis
 *          2.读mysql
 *          3.写redis
 *
 *  延迟双删策略 就是
 *  写数据： ws  保证redis 的数据不会出现错误
 *          1.删除 redis
 *          2.写入 mysql
 *          3.延迟 删除 redis
 *     那有没有可能 在读数据时
 *          ws1
 *          r1
 *          r2
 *          ws2
 *          ws3
 *          r3
 *    这不就也是 redis 出现了脏数据吗 ？
 *    这就需要 延迟 删除 的原因了要保证
 *    ws2 -> ws3 的时间 大于  r2 -> r3 的时间
 *   那这个这个删除该休眠多久呢
 * 这个时间怎么确定呢?
 * 第一种方法: 100ms 100毫秒即可
 *      在业务程序运行的时候，统计下线程读数据和写缓存的操作时间，自行评估自己的项目的读数据业务逻辑的耗时,
 *      以此为基础来进行估算。然后写数据的休眠时间则在读数据业务逻辑的耗时基础上加""百毫秒""即可。
 *      这么做的目的，就是确保读请求结束，写请求可以删除读请求造成的缓存脏数据。
 * @see B_一致性测试  的add2方法
 * 第二种方法:
 *      新启动一个后台监控程序，比如后面要讲解的WatchDog监控程序，会加时
 *
 *
 */
public class C_延迟双删策略 {
    public static void main(String[] args) {

    }
}
